﻿using Library.Collections.Generic;
using Library.Collections.Specialized;
using Library.Linq.Expressions;
using Library.Logic;
using System.Diagnostics.Contracts;
using System;
using System.Linq;
using Library.Logic.Constraints;
using TRULE = System.Linq.Expressions.Expression<System.Func<System.Linq.IQueryable<System.Linq.Expressions.Expression>, System.Collections.Generic.IEnumerable<System.Collections.Generic.IEnumerable<System.Linq.Expressions.Expression>>>>;
using TEXPRESSION = System.Linq.Expressions.Expression;

namespace Library.Data
{
    public interface ITableCollection : IHasName<string> //...
    {
        
    }

    public interface ITableReadOnly<TColumn, TRow> : IHasElementConstraintsReasonReadOnly, IHasName<string>, IQueryable<TRow>, IContainerBulk<TRow>
        where TColumn : IHasName<string>, IHasType
    {
        [Pure]
        IVectorReadOnly<TColumn> Columns { get; }
    }

    public interface ITable<TColumn, TRow> : IHasElementConstraintsReason, ICollectionReason<TRow>, ICollectionBulk<TRow>, ITableReadOnly<TColumn, TRow>
        where TColumn : IHasName<string>, IHasType
    {
        [Pure]
        new IList<TColumn> Columns { get; }
    }
}
